package com.woniuxy.core.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniuxy.entity.AllUser;
import com.woniuxy.entity.DTO.UserInfoDTO;
import com.woniuxy.entity.SocialRelationship;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author 35123
 * @description 针对表【social_relationship(用户社交关系表)】的数据库操作Service
 * @createDate 2025-07-12 11:31:28
 */
public interface SocialRelationshipService extends IService<SocialRelationship> {

    /**
     * 关注用户
     *
     * @param userId   当前用户ID
     * @param targetId 目标用户ID
     */
    void followUser(Long userId, Long targetId);

    /**
     * 取消关注用户
     *
     * @param userId   当前用户ID
     * @param targetId 目标用户ID
     */
    void unfollowUser(Long userId, Long targetId);

    /**
     * 获取用户的关注列表（分页）
     *
     * @param userId 当前用户ID
     * @param page   分页参数
     * @return 关注的用户列表（分页结果）
     */
    Page<UserInfoDTO> getFollowList(Integer userId, Page<UserInfoDTO> page);

    /**
     * 获取用户的粉丝列表（分页）
     *
     * @param userId 当前用户ID
     * @param page   分页参数
     * @return 粉丝的用户列表（分页结果）
     */
    Page<UserInfoDTO> getFansList(Integer userId, Page<UserInfoDTO> page);

    /**
     * 获取用户的互关列表（分页）
     *
     * @param userId 当前用户ID
     * @param page   分页参数
     * @return 互关的用户列表（分页结果）
     */
    Page<UserInfoDTO> getMutualFollowList(Integer userId, Page<UserInfoDTO> page);

    /**
     * 统计用户的互关数量
     *
     * @param userId 用户ID
     * @return 互关数
     */
    Long countMutualFollow(Integer userId);

    /**
     * 判断用户是否已关注目标用户
     *
     * @param userId   当前用户ID
     * @param targetId 目标用户ID
     * @return 是否已关注
     */
    Boolean isUserFollowed(Long userId, Long targetId);

    /**
     * 推荐好友
     *
     * @param userId 用户ID
     * @param count  推荐好友数量
     * @return 推荐好友列表
     */
    List<UserInfoDTO> recommendFriends(Long userId);

}
